iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
class MainViewController: UIViewController {

    let accountRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
    let passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,}$"
    var accountIsValid = false
    var passwordIsValid = false

     emailTextfield.keyboardType = .emailAddress
     passwordTextfield.keyboardType = .asciiCapable
     emailTextfield.autocapitalizationType = .none
     passwordTextfield.autocapitalizationType = .none
     emailTextfield.autocorrectionType = .no
     passwordTextfield.autocorrectionType = .no

     override func viewDidLoad() {
     super.viewDidLoad()

     emailTextfield.addTarget(self, action: #selector(accountTextFieldDidChange),
        for: .editingChanged)
     passwordTextfield.addTarget(self, action: #selector(passwordTextFieldDidChange),
        for: .editingChanged)
        
        
     @objc func accountTextFieldDidChange(_ sender: UITextField) {
        // 檢查帳號輸入格式
        accountIsValid = NSPredicate(format: "SELF MATCHES %@",
           accountRegex).evaluate(with: sender.text)
    }
    
    @objc func passwordTextFieldDidChange(_ sender: UITextField) {
        // 檢查密碼輸入格式
        passwordIsValid = NSPredicate(format: "SELF MATCHES %@",
           passwordRegex).evaluate(with: sender.text)
    }
  }
        
}

accountRegex:這是一個儲存正則表達式的字串,用於驗證電子郵件帳號的格式是否正確。

passwordRegex:這是一個儲存正則表達式的字串,用於驗證密碼的格式是否正確。這個正則表達式要求密碼必須包含至少一個小寫字母、一個大寫字母和至少八個字符。

accountIsValid:這是一個布林值,用於表示帳號是否有效。初始設定為false,當帳號格式符合正則表達式時,會設定為true。

passwordIsValid:這是一個布林值,用於表示密碼是否有效。初始設定為false,當密碼格式符合正則表達式時,會設定為true。

鍵盤設定

在接下來的程式碼中,進行了以下鍵盤相關的設定:

emailTextfield.keyboardType:將emailTextfield(假設是一個文字輸入欄位)的鍵盤類型設定為電子郵件地址的輸入模式,以便在輸入時顯示適當的鍵盤。

passwordTextfield.keyboardType:將passwordTextfield(假設是一個文字輸入欄位)的鍵盤類型設定為ASCII可輸入模式,這是用於密碼輸入的通用鍵盤。

emailTextfield.autocapitalizationType:設定emailTextfield的自動大寫處理為"none",這表示不自動將輸入的文字轉為大寫。

passwordTextfield.autocapitalizationType:設定passwordTextfield的自動大寫處理為"none",同樣表示不自動轉為大寫。

emailTextfield.autocorrectionType和passwordTextfield.autocorrectionType:設定這兩個輸入欄位的自動校正為"no",這表示禁用自動校正功能,避免系統自動更正輸入。

視圖控制器的生命週期方法

在程式碼的最後部分,覆寫了viewDidLoad()方法,這是視圖控制器生命週期的一部分。在這個方法內,完成以下操作:

使用addTarget(:action:for:)方法為emailTextfield和passwordTextfield兩個輸入欄位添加了目標和動作。這意味著當這兩個輸入欄位的內容變化時,分別會調用accountTextFieldDidChange(:)和passwordTextFieldDidChange(_:)這兩個方法。

@objc func accountTextFieldDidChange(_ sender: UITextField):這是處理帳號輸入欄位變化的方法。它使用正則表達式來檢查輸入的帳號格式是否正確,並將結果存儲在accountIsValid中。

@objc func passwordTextFieldDidChange(_ sender: UITextField):這是處理密碼輸入欄位變化的方法。它使用正則表達式來檢查輸入的密碼格式是否正確,並將結果存儲在passwordIsValid中。

總之,這個程式碼片段用於設置並管理一個畫面中的文字輸入欄位,同時使用正則表達式來驗證帳號和密碼的格式是否符合要求。當使用者輸入時,它會即時檢查並更新相應的布林值,以供後續的操作和驗證使用。這是一個常見的用法,特別是在用戶註冊和登錄方面。


上一篇
Day 28 Alert
下一篇
Day30 感想、回顧
系列文
swift 新手路程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言